跳到主要内容

使用 service 控制服务

service 是什么?

service 命令是 Linux 系统中用于管理系统服务的工具。可以使用该命令来启动、停止、重启、检查系统服务的状态等操作。具体用法为:

service <service_name> <action>

其中,service_name 是指服务的名称,action 是指要执行的操作,可以是 start、stop、restart、status 等。例如,要启动 apache2 服务,可以使用以下命令:

service apache2 start

要检查服务的状态,可以使用以下命令:

service apache2 status

service 和 systemd 的区别

service 和 systemd 都是用于管理 Linux 系统服务的工具,但它们有一些区别。

1、服务命令不同 service 是一种过时的用于管理系统服务的命令。它是早期的 SysVinit 系统使用的命令,它以脚本的形式启动和停止服务。而 systemd 是一种现代的系统和服务管理器,它在启动系统应用程序之前管理系统服务,并为系统服务提供了更多的控制与管理能力。

2、启动速度不同 相比之下,systemd 启动服务的速度比 SysVinit 更快,因为它使用并行启动方式,可以同时启动多个服务。而 SysVinit 则是一种顺序启动方式,无法同时启动多个服务。

3、系统日志和进程管理方式不同 systemd 具有更强大的日志和进程管理功能。它不仅承担着 SysVinit 所具备的系统进程的管理职责外,还集中了多个日志系统,如 journald 等,使得服务的日志管理更加方便。

4、支持 Socket Activation 与 SysVinit 不同的是,systemd 具有 Socket Activation 的特性。对于一些网络服务,systemd 可以先创建相应的 socket 并监听端口,无需启动完整的服务进程,当有连接请求到达时再开始完整的服务程序。这样可以提高服务的启动速度,并降低资源消耗。

为什么 WSL2 无法使用 systemd

由于 WSL2 是在 Windows 内核上提供的一种轻型 Linux 环境,与标准的 Linux 内核的构成有所不同,WSL2 无法像标准的 Linux环境一样使用systemd,这是因为 systemd 依赖于 Linux 内核提供的一些机制、模块以及系统服务,在 WSL2 中这些机制、模块和服务可能不存在,或者与标准的 Linux 环境有所不同。

作为替代方案,WSL2 采用了 Windows Service Manager 作为服务启动和进程管理器,而不是 systemd。这可以保证 WSL2 中的服务的运行及管理,并且还能够使 Windows 平台的其他系统服务与 WSL2 中的服务进行协作,以实现更平滑的系统体验。

WSL2 上对 Docker 进行开机自启

因为 WSL2 使用的不是 systemd 所以配置开机自启还是有点麻烦,每次启动 Docker 服务时会报错 “Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”,所以这里通过设置 Windows Service Manager 的方式来实现 Docker 开机自启。

1、使用 root 权限编辑 /etc/wsl.conf 文件,如果此文件不存在,创建一个新的。

sudo vim /etc/wsl.conf

2、文件内容添加以下设置:

先检查是否存在 dockerd

[boot]
command="/usr/bin/dockerd"

这样设置后,WSL2 启动时会自动启动 Docker 服务。

3、保存文件并重新启动 WSL2。

wsl.exe --shutdown

4、检查 Docker 服务是否已成功开机自启。可以使用以下命令:

sudo service docker status